/**
 * 文件功能：API接口统一管理
 * 作者：开发者
 * 日期：2024年
 * 描述：统一管理所有API接口，提供统一的调用方式
 */

import request from './request';

/**
 * API接口管理类
 * @description 统一管理所有API接口请求
 */
class ApiService {
  /**
   * 猜行李相关接口
   */
  static luggage = {
    /**
     * 猜行李接口
     * @param {Object} data - 猜测数据
     * @param {string} data.guessedBaggageIds - 猜的行李ID列表（逗号分隔）
     * @param {number} data.matchScore - 默契度得分
     * @param {string} data.openId - 微信openId
     * @param {string} data.userId - 分享人的userId或客户编号
     * @returns {Promise} 返回猜行李结果
     */
    getLuggageByUserId: (data) => request.post('/system/api/guessLuggage', data),

    /**
     * 提交猜行李结果
     * @param {Object} data - 猜测数据
     * @param {string} data.guessedBaggageIds - 猜的行李ID列表（逗号分隔）
     * @param {number} data.matchScore - 默契度得分
     * @param {string} data.openId - 微信openId
     * @param {string} data.userId - 分享人的userId或客户编号
     * @returns {Promise} 返回提交结果
     */
    submitGuess: (data) => request.post('/system/api/submitLuggageGuess', data),

    /**
     * 获取物品列表数据
     * @param {Object} params - 查询参数
     * @param {number} params.page - 页码，默认1
     * @param {number} params.limit - 每页数量，默认10
     * @returns {Promise} 返回物品列表数据
     */
    getLuggageListData: (params = { page: 1, limit: 999 }) => request.get('/system/api/luggageListData', { params }),
  };

  /**
   * 微信相关接口
   */
  static wechat = {
    /**
     * 获取微信JS-SDK配置
     * @param {Object} data - 请求数据
     * @param {string} data.url - 当前页面URL
     * @returns {Promise} 返回JS-SDK配置信息
     */
    getJsSdk: (data) => request.post('/system/api/get-wx-js-sdk', data),

    /**
     * 微信登录
     * @param {Object} data - 登录数据
     * @param {string} data.code - 微信授权码
     * @returns {Promise} 返回登录结果
     */
    login: (data) => request.get('/system/api/wechatLogin', {
      params: data
    }),
  };

  /**
   * 排行榜相关接口
   */
  static ranking = {
    /**
     * 获取默契度排行榜
     * @param {Object} params - 查询参数
     * @param {number} params.page - 页码（可选）
     * @param {number} params.pageSize - 每页数量（可选）
     * @returns {Promise} 返回排行榜数据
     */
    getRankingList: (data) => request.post('/system/api/rankingList', data),

    /**
     * 展示默契度
     * @param {Object} params - 查询参数
     * @param {string} params.userId - 用户ID
     * @returns {Promise} 返回默契度展示数据
     */
    displayingRanking: (data) => request.post('/system/api/displayingRanking', data),
  };

  /**
   * 通用接口方法
   */
  static common = {
    /**
     * GET请求
     * @param {string} url - 请求地址
     * @param {Object} params - 请求参数
     * @returns {Promise} 返回请求结果
     */
    get: (url, params) => request.get(url, { params }),

    /**
     * POST请求
     * @param {string} url - 请求地址
     * @param {Object} data - 请求数据
     * @returns {Promise} 返回请求结果
     */
    post: (url, data) => request.post(url, data),

    /**
     * PUT请求
     * @param {string} url - 请求地址
     * @param {Object} data - 请求数据
     * @returns {Promise} 返回请求结果
     */
    put: (url, data) => request.put(url, data),

    /**
     * DELETE请求
     * @param {string} url - 请求地址
     * @returns {Promise} 返回请求结果
     */
    delete: (url) => request.delete(url),
  };
}

// 导出API服务
export default ApiService;

// 也可以按模块导出
export const { luggage, wechat, ranking, packaging, common } = ApiService;